2. enum hack & inline

enumerator(enum)는 const보다 define에 가깝게 동작한다.

enum으로 정의된 값의 주소를 취하는 것을 허용하지 않으며,
추가적인 메모리 할당을 하지 않는다.
enum hack
class GamePlayer{
private:
enum{ NumTurns=5 };
// ...
int scores[NumTurns];
// ...
};
#define Macro
#define 매크로 함수를 사용할려고 할 경우,
인자마다 괄호를 씌워 주어야 하며, 아래와 같이 의도치 않은 동작을 유발할 수 있다.
#define CALL_WITH_MAX(a, b) f((a)>(b)? (a): (b))
int a=5, b=0;
CALL_WITH_MAX(++a, b); // ++a
CALL_WITH_MAX(++a, b+10); // ++a
대신 inline 함수를 사용하는 것이 좋다.
template <typename T>
inline void callWithMax(const T& a, const T& b){
f(a>b)? a: b;
}
++a의 결과가 const T&로 전달되기 때문에 연산이 중복적으로 실행되지 않으며,
함수이기에 유효범위 및 접근 규칙을 동일하게 따른다.